from .models import BaseModel

# Modül:temalar/veri/söz_biçim
GLOSS_TAGS = {
    "mecaz": "metaphoric",  # "Şablon:mecaz"
    "bazen": "sometimes",
    "özellikle": "especially",
    "ender": "rare",
    "kısa": "short-form",
    "Almanya": "Germany",
    "Amerika Birleşik Devletleri": "US",
    "Asya": "Asia",
    "Avrupa": "Europe",
    "Avrupa Birliği": "European-Union",
    "Avustralya": "Australia",
    "Avusturya": "Austria",
    "Fransa": "France",
    "Hindistan": "India",
    "Hinduizm": "Hinduism",
    "Irak": "Iraq",
    "İngiltere": "England",
    "İrlanda": "Ireland",
    "İsviçre": "Switzerland",
    "Kanada": "Canada",
    "retorik": "rhetoric",
    "Türkiye": "Turkey",
    "Yeni Zelanda": "New Zealand",
    "halk ağzı": "dialectal",
    "argo": "slang",
    "artık kullanılmayan sözcükler": "obsolete",
    "aşağılayıcı ifadeler": "pejorative",
    "çocuk dili": "childish",
    "eskimekte": "obsolete",
    "eskimiş": "obsolete",
    "günlük konuşma dili": "vernacular",
    "hakaret yollu sözcükler": "offensive",
    "internet jargonu": ["Internet", "jargon"],
    "kaba konuşma": "vulgar",
    "kısa biçimler": "short-form",
    "konuşma dili ifadeleri": "vernacular",
    "mecazlar": "metaphoric",
    "örtmeceler": "euphemistic",
    "resmî dil": "official-language",
    "şaka yollu sözcükler": "humorous",
    "şiirsel terimler": "poetic",
    "teklifsiz konuşma": "informal",
    "kökler": "root",
    # Modül:temalar/veri/söz türü
    "adlar": "noun",
    "adıllar": "pronoun",
    "akronimler": "acronym",
    "atasözleri": "proverb",
    "bağlaçlar": "conjunction",
    "belirli adlar": ["definite", "name"],
    "belirsiz adlar": ["indefinite", "name"],
    "belirteçler": "adverb",
    "belgisiz adıllar": ["indefinite", "pronoun"],
    "çekimli adlar": ["declinable", "noun"],
    "çekimli adıllar": ["declinable", "pronoun"],
    "çekimli eylemler": ["declinable", "pronoun"],
    "çekimli kısaltmalar": ["declinable", "abbreviation"],
    "çekimli ortaçlar": ["declinable", "participle"],
    "çekimli ön adlar": ["declinable", "adjective"],
    "çekimli özel adlar": ["declinable", "name"],
    "çekimli sayı adları": ["declinable", "numeral"],
    "çekimli son ekler": ["declinable", "suffix"],
    "çoğul ad formları": ["plural", "noun"],
    "deyimler": "idiomatic",
    "dişil adlar": ["feminine", "noun"],
    "dişil çekimli adlar": ["feminine", "declinable", "noun"],
    "edatlar": "prepositional",
    "erkek adları": ["masculine", "name"],
    "eylemler": "verb",
    "geçişli eylemler": ["transitive", "verb"],
    "geçişsiz eylemler": ["intransitive", "verb"],
    "dönüşlü eylemler": ["reflexive", "verb"],
    "işteş eylemler": ["reciprocal", "verb"],
    "geçişli": "transitive",
    "geçişsiz": "intransitive",
    "dönüşlü": "reflexive",
    "işteş": "reciprocal",
    "düzensiz eylemler": ["irregular", "verb"],
    "harfler": "letter",
    "kişi adılları": ["personal", "pronoun"],
    "sayı adları": ["numeral", "name"],
    "sayılabilen adlar": ["countable", "noun"],
    "sayılamayan adlar": ["uncountable", "noun"],
    "sıral sayılar": ["ordinal", "numeral"],
}

POS_HEADER_TAGS = {
    # Şablon:tr-ad
    "belirtme hâli": "accusative",
    "çoğulu": "plural",
    # Şablon:en-ad
    "üçüncü tekil kişi geniş zaman": ["third-person", "singular", "present"],
    "şimdiki zaman": "present",
    "geçmiş zaman ve yakın geçmiş zaman": "past",
    "sayılabilen ve sayılamayan": ["countable", "uncountable"],
    "sayılabilen": "countable",
    "sayılamayan": "uncountable",
    # Şablon:de-ad
    "tamlayan hâli": "genitive",
    "dişil": "feminine",
    "d": "feminine",
    "e": "masculine",
    "eril": "masculine",
    "sahiplik şekli": "possessive",  # Şablon:sahiplik
    # Şablon:tr-eylem
    "üçüncü tekil şahıs geniş zaman çekimi": [
        "third-person",
        "singular",
        "present",
    ],
    # Şablon:tr-ön ad
    "karşılaştırma": "comparative",
    "üstünlük": "superlative",
}

TRANSLATION_TAGS = {
    # Modül:cinsiyet_ve_numara
    "n": "neutral",
    "g": "general",
    "anim": "animate",
    "cansız": "inanimate",
    "pers": "personal",
    "npers": "impersonal",
    "te": "singular",
    "ik": "dual",
    "ç": "plural",
    "impf": "imperfective",
    "pf": "perfective",
}

LINKAGE_TAGS = {
    "eskimiş": "obsolete",
}

TABLE_TAGS = {
    # Şablon:tr-ad-tablo
    "tekil": "singular",
    "çoğul": "plural",
    "yalın": "nominative",
    "belirtme": "accusative",
    "yönelme": "dative",
    "bulunma": "locative",
    "ayrılma": "ablative",
    "tamlayan": "genitive",
    "iyelik": "possessive",
    "1. tekil": ["first-person", "singular"],
    "2. tekil": ["second-person", "singular"],
    "3. tekil": ["third-person", "singular"],
    "1. çoğul": ["first-person", "plural"],
    "2. çoğul": ["second-person", "plural"],
    "3. çoğul": ["third-person", "plural"],
    # Şablon:tr-eylem-tablo
    "olumlu çekimler": "positive",
    "belirli geçmiş": ["definite", "past"],
    "belirsiz geçmiş": ["indefinite", "past"],
    "şimdiki": "present",
    "gelecek": "future",
    # "basit": "simple",
    # "hikaye": "",
    # "rivayet": "",
    "şart": "conditional",
    "gereklilik": "necessitative",
    "olumsuz çekimler": "negative",
}


TAGS = {
    **GLOSS_TAGS,
    **POS_HEADER_TAGS,
    **TRANSLATION_TAGS,
    **LINKAGE_TAGS,
    **TABLE_TAGS,
}

# https://tr.wiktionary.org/wiki/Modül:temalar/veri/konu
# https://tr.wiktionary.org/wiki/Modül:temalar/veri/grup
TOPICS = {
    "anatomi": "anatomy",
    "diller": "language",
    "akışkanlar mekaniği": "fluid-dynamics",
    "antropoloji": "anthropology",
    "arıcılık": "beekeeping",
    "aritmetik": "arithmetic",
    "arkeoloji": "archaeology",
    "askeriye": "military",
    "astroloji": "astrology",
    "aşçılık": "cooking",
    "avcılık": "hunting",
    "bakteriyoloji": "bacteriology",
    "bale": "ballet",
    "balıkçılık": "fishing",
    "bankacılık": "banking",
    "basketbol": "basketball",
    "basın-yayın": "publishing",
    "bilardo": "billiards",
    "bilgisayar bilimi": ["computer", "science"],
    "bilgisayar dili": "computer-languages",
    "bilim": "science",
    "bilişim": "informatics",
    "binalar": "building",
    "binicilik": "equestrianism",
    "Birleşik Krallık": "UK",
    "bitki anatomisi": "botany",
    "bitki bilimi": "botany",
    # "bitki hastalıkları": "",
    "biyokimya": "biochemistry",
    "biyoloji": "biology",
    "biyoteknoloji": "biotechnology",
    "boks": "boxing",
    "böcek bilimi": "entomology",
    "Budizm": "Buddhism",
    "budun bilimi": "ethnology",
    "cerrahi": "surgery",
    "ceza hukuku": "law",
    "cinsellik": "sexuality",
    "cinsellik bilimi": "sexology",
    "cinsiyet": "sexuality",
    "coğrafya": "geography",
    "dans": "dancing",
    "demiryolu ulaşımı": ["railways", "transport"],
    "dermatoloji": "dermatology",
    "dil bilgisi": "grammar",
    "dil bilimi": "linguistics",
    "din": "religion",
    "diplomasi": "diplomacy",
    "diş hekimliği": "dentistry",
    "doğa bilimi": "natural-sciences",
    "dokuma": "weaving",
    "drama": "drama",
    "eczacılık": "pharmacology",
    "edebiyat": "literature",
    "eğitim": "education",
    "eğlence": "entertainment",
    "ekonomi": "economics",
    "elektrik": "electricity",
    "elektrik mühendisliği": "electrical-engineering",
    "elektromanyetizm": "electromagnetism",
    "elektronik": "electronics",
    "enerji": "energy",
    "epistemoloji": "epistemology",
    "eşey": "sex",
    "etik": "ethics",
    "evlilik": "marriage",
    "evrim": "evolution",
    "fahişelik": "prostitution",
    "farmakoloji": "pharmacology",
    "felsefe": "philosophy",
    "filateli": "philately",
    "finans": "finance",
    "fitopatoloji": "phytopathology",
    "fizik": "physics",
    "fizyoloji": "physiology",
    "fotoğrafçılık": "photography",
    "futbol": "football",
    "genetik": "genetics",
    "geometri": "geometry",
    "gezegen bilimi": ["planets", "science"],
    "giyim": "clothing",
    "gök bilimi": "astronomy",
    "hapishane": "prison",
    "haritacılık": "cartography",
    "hastalık": "illness",
    "hava": "weather",
    "hava taşıtı": "aircraft",
    "havacılık": "aviation",
    "havacılık ve uzay mühendisliği": ["aviation", "aerospace", "engineering"],
    "hayvan bilimi": "zoology",
    "hayvancılık": "husbandry",
    "hematoloji": "hematology",
    "hidroloji": "hydrology",
    "hijyen": "hygiene",
    "Hristiyanlık": "Christianity",
    "hobiler": "hobbies",
    "hukuk": "law",
    "hükûmet": "government",
    "İbrahimî dinler": "Abrahamic-religions",
    "iç giyim": "underwear",
    "idam": "execution",
    "ideolojiler": "ideology",
    "iklim bilimi": "climatology",
    "iletişim": "communications",
    "imalat": "manufacturing",
    "immünoloji": "immunology",
    "internet": "Internet",
    # "intihar": "suicide",
    "iskambil": "card-games",
    "iskân": "inhabiting",
    "İslam": "Islam",
    "İslâm": "Islam",
    "istatistik": "statistics",
    "işletme": "business",
    "işletmeler": "business",
    "itfaiyecilik": "firefighting",
    "jeofizik": "geophysics",
    "jeoloji": "geology",
    "jinekoloji": "gynecology",
    # "kadın": "woman",
    # "kâğıt": "paper",
    "kara ulaşımı": ["road", "transport"],
    "kardiyoloji": "cardiology",
    "Katoliklik": "Catholicism",
    "kırtasiye": "stationery",
    "kimya": "chemistry",
    "kişilik": "personality",
    # "kitap": "book",
    "Kitab-ı Mukaddes": "biblical",
    "konstrüksiyon": "construction",
    "kozmetik": "cosmetics",
    "kriket": "cricket",
    "kriminoloji": "criminology",
    "kriptografi": "cryptography",
    "kristalografi": "crystallography",
    "kuantum mekaniği": "quantum-mechanics",
    "kumaş": "fabrics",
    "kuş bilimi": "ornithology",
    "kültür": "culture",
    "LGBT": "LGBT",
    "madencilik": "mining",
    "marangozluk": "carpentry",
    "masa oyunu": "board-games",
    "matbaacılık": "printing",
    "makine mühendisliği": "mechanical-engineering",
    "malzeme bilimi": "material-science",
    "malzemeler": "materials",
    "mandıracılık": "dairy",
    "mantık": "logic",
    "manyetizma": "magnetism",
    "matematik": "mathematics",
    "matematiksel analiz": "mathematical-analysis",
    "medya": "media",
    "mekanik": "mechanics",
    "metalurji": "metallurgy",
    "meteoroloji": "meteorology",
    "metroloji": "metrology",
    "mikoloji": "mycology",
    "mikrobiyoloji": "microbiology",
    "mimarlık": "architecture",
    "mineraloji": "mineralogy",
    "mitoloji": "mythology",
    "mobilya": "furniture",
    "moda": "fashion",
    "moleküler biyoloji": "molecular-biology",
    "monarşi": "monarchy",
    "mühendislik": "engineering",
    "müzik": "music",
    "müzisyenler": "musician",
    "nörobilim": "neuroscience",
    "nöroloji": "neurology",
    "nümismatik": "numismatics",
    "okçuluk": "archery",
    "Okültizm": "occult",
    "okyanus bilimi": "oceanography",
    "olasılık": "probability",
    "olasılık kuramı": "probability-theory",
    "onkoloji": "oncology",
    "opera": "opera",
    "optik": "optics",
    "organik kimya": "organic-chemistry",
    "Ortodoksluk": "Orthodoxy",
    "ormancılık": "forestry",
    "ortografi": "orthography",
    "otomotiv": "automobile-industry",
    "oyun": "games",
    "ölçü birimleri": "units-of-measure",
    # "ölüm": "death",
    "Paganizm": "paganism",
    "paleontoloji": "paleontology",
    "para": "money",
    "parapsikoloji": "parapsychology",
    "patoloji": "pathology",
    "pazarlama": "marketing",
    "petroloji": "petrology",
    "polis": "police",
    "politika": "politics",
    "posta": "mail",
    "programlama": "programming",
    "Protestanlık": "Protestantism",
    "psikiyatri": "psychiatry",
    "radyo": "radio",
    "radyo ve televizyon yayıncılığı": ["radio", "television", "broadcasting"],
    "reklamcılık": "advertising",
    # "resim": "painting",
    # "restoranlar": "restaurant",
    "robotik": "robotics",
    "ruh bilimi": "psychology",
    "sağlık": "health",
    "sanat": "arts",
    # "sandalyeler": "chairs",
    "satranç": "chess",
    "sayılar teorisi": "number-theory",
    "seramik": "ceramics",
    # "ses": "voice",
    "ses bilgisi": "phonetics",
    "ses bilimi": "phonology",
    # "sinema": "cinema",
    "sismoloji": "seismology",
    "sitoloji": "cytology",
    "sosyal bilimler": "sociology",
    "sözdebilim": "pseudoscience",
    "spor": "sports",
    # "suç": "crime",
    # "suç önleme": "crime-prevention",
    "Sünnilik": "Sunnism",
    "Şamanizm": "shamanism",
    "Şiilik": "Shi'ism",
    "şiir sanatı": "poetry",
    "taksonomi": "taxonomy",
    "takvim": "calendar",
    "tarım": "agriculture",
    "tarih": "history",
    "teknoloji": "technology",
    "tekstil": "fabrics",
    "telefonculuk": "telephony",
    "telekomünikasyon": "telecommunications",
    "televizyon": "television",
    "termodinamik": "thermodynamics",
    "tıp": "medicine",
    "ticaret": "commerce",
    "tiyatro": "theater",
    "toksikoloji": "toxicology",
    "toplum bilimi": "sociology",
    "ulaşım": "communications",
    "uygulamalı bilimler": "applied-sciences",
    # "uyku": "sleep",
    # "uzay": "space",
    "veritabanı": "databases",
    "veteriner hekimliği": ["veterinary", "medicine"],
    "video oyunları": "video-games",
    "volkanoloji": "volcanology",
    "vücut": "body",
    "Yahudilik": "Judaism",
    "yapı bilgisi": "morphology",
    "yazı": "writing",
    "yazılım": "software",
    "yazılım mühendisliği": "software-engineering",
    "yollar": "road",
    "yönetim": "management",
    "yüzey bilimi": "geomorphology",
    "zaman": "time",
    # Modül:temalar/veri/grup
    # "adalar": "island",
    "aletler": "tools",
    "alkollü içecekler": "beverages",
    "ateşli silahlar": "firearms",
    "atgiller": "horses",
    "balıklar": "fish",
    # "belediyeler": "municipalities",
    "böcekler": "insects",
    "bilimsel adlar": "scientific",
    "bitkiler": "vegetable",
    # "çay": "tea",
    "çiçekler": "flowery",
    "doğangiller": "falconry",
    "gezegenler": "planets",
    "haftanın günleri": "weekdays",
    "içecekler": "beverages",
    # "ilçeler": "districts",
    # "kahve": "coffee",
    "kemikler": "bone",
    "kemiriciler": "rodents",
    "kıtalar": "continents",
    # "köyler": "village",
    # "kuşlar": "birds",
    "memeliler": "mammals",
    "mevsimler": "seasons",
    "renkler": "color",
    "sebzeler": "vegetable",
    "silahlar": "weapon",
    "şehirler": "cities",
    "takılar": "jewellery",
    "taşıtlar": "vehicles",
    "top oyunları": "ball-games",
    "ülkeler": "country",
    "yapılar": "architecture",
    "yılanlar": "snakes",
    "yiyecekler": "food",
}


def translate_raw_tags(data: BaseModel) -> None:
    raw_tags = []
    for raw_tag in data.raw_tags:
        if raw_tag in TAGS and hasattr(data, "tags"):
            tr_tag = TAGS[raw_tag]
            if isinstance(tr_tag, str) and tr_tag not in data.tags:
                data.tags.append(tr_tag)
            elif isinstance(tr_tag, list):
                for t in tr_tag:
                    if t not in data.tags:
                        data.tags.append(t)
        elif raw_tag in TOPICS and hasattr(data, "topics"):
            topic = TOPICS[raw_tag]
            if isinstance(topic, str) and topic not in data.topics:
                data.topics.append(topic)
            elif isinstance(topic, list):
                for t in topic:
                    if t not in data.topics:
                        data.topics.append(t)
        else:
            raw_tags.append(raw_tag)
    data.raw_tags = raw_tags
